<?php
/**
 * 公用回调地址
 * 微信支付-回调地址分发层
 * 2019-09-25
 * ZJY
 */

// 获取接口数据，如果 $_REQUEST 拿不到数据，则使用 file_get_contents 函数获取
$post=$_REQUEST;
if(empty($post)){
    $post=file_get_contents('php://input');
}
// file_put_contents(__DIR__.'/'.date('YmdHis').'.txt',var_export($post,true));
if(empty($post) || $post==null || $post=='') {
    // 阻止微信接口反复回调接口  文档地址 https://pay.weixin.qq.com/wiki/doc/api/H5.php?chapter=9_7&index=7，下面这句非常重要!!!
    $return_xml='<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[ERRORempty]]></return_msg></xml>';
    echo $return_xml;
    exit();
}

/*****************微信回调返回数据样例*******************
 $post = '<xml>
    <return_code><![CDATA[SUCCESS]]></return_code>
    <return_msg><![CDATA[OK]]></return_msg>
    <appid><![CDATA[wx2421b1c4370ec43b]]></appid>
    <mch_id><![CDATA[10000100]]></mch_id>
    <nonce_str><![CDATA[IITRi8Iabbblz1Jc]]></nonce_str>
    <sign><![CDATA[7921E432F65EB8ED0CE9755F0E86D72F]]></sign>
    <result_code><![CDATA[SUCCESS]]></result_code>
    <prepay_id><![CDATA[wx201411101639507cbf6ffd8b0779950874]]></prepay_id>
    <trade_type><![CDATA[APP]]></trade_type>
    </xml>';
*************************微信回调返回*****************/
libxml_disable_entity_loader(true); // 禁止引用外部xml实体
$xml=simplexml_load_string($post, 'SimpleXMLElement', LIBXML_NOCDATA);// XML转数组
$post_data=(array)$xml;
$attach=json_decode($post_data['attach'],true);
// 从微信参数 附加数据attach 中获取真实 回调地址notify_url
$notify_url=$attach['notify_url'];
if(empty($notify_url)){
    $return_xml='<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[ERRORattach]]></return_msg></xml>';
    echo $return_xml;
    exit();
}

$url=$notify_url;
$data=$post;
$headers=array();
$headers[] = "Content-type: text/xml";
$headers[] = 'Accept: image/gif, image/jpeg, image/pjpeg, image/pjpeg, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*';
$headers[] = 'Connection: Keep-Alive';
$headers[] = 'Accept-Language: zh-cn';
$headers[] = 'Cache-Control: no-cache';

$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, $url);
if( count($headers) >= 1 ){
    curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
}
// 关键之处
curl_setopt($curl, CURLOPT_USERAGENT, 'Mozilla/5.0 (Linux; U; Android 2.3.6; zh-cn; GT-S5660 Build/GINGERBREAD) AppleWebKit/533.1 (KHTML, like Gecko) Version/4.0 Mobile Safari/533.1 MicroMessenger/4.5.255');

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, FALSE);
if (!empty($data)){
    curl_setopt($curl, CURLOPT_POST, 1);
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
}
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
$output = curl_exec($curl);
if(curl_errno($curl)){
    $return_xml='<xml><return_code><![CDATA[FAIL]]></return_code><return_msg><![CDATA[ERRORcurl]]></return_msg></xml>';
    echo $return_xml;
    exit();
}
curl_close($curl);
// file_put_contents(__DIR__.'/'.date('YmdHis').'.txt',var_export($output,true));
echo $output;